﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using MDK;
using MDK.Physics;
using ZedGraph;

namespace micro9
{
    public class DalizFigure : GraphicPrimitive
    {
        #region Конструкторы
        public DalizFigure()
            : base(0, 0, new Size())
        {
            this.Needs = ExperimentNeeds.Normal;
            AddParametersToTemplate();
        }

        public DalizFigure(int Left, int Top, Size Size)
            : base(Left, Top, Size)
        {
            this.Needs = ExperimentNeeds.Normal;

            // передаём размеры
            this.Left = Left;
            this.Top = Top;

            this.Size = Size;

            //создаём список по умолчанию
            AddParametersToTemplate();
        }
        #endregion

        #region Методы взаимодействия с главным модулем

        /// <summary>
        /// Метод для возвращения описания эксперимента.
        /// </summary>
        /// <returns>Возвращаемый объект содержит краткое имя модуля(чаще имя класса), полное название эксперимента и его описание</returns>
        public override ExperimentAbout GetAbout()
        {
            return new ExperimentAbout("DalizFigure", "Построение фигуры Далица", "Фигура Далица используется при анализе распадов на три частицы. Данный экспекримент позволяет строить её.");
        }

        private void AddParametersToTemplate()
        {
            ParameterListTemplate = new ParameterList();

            
            ParameterListTemplate.Add("Масса распадающейся частицы(МэВ)", "m", 500.0);
          
            ParameterListTemplate.Add("Масса частицы 1(МэВ)", "m1", 30.0);
            ParameterListTemplate.Add("Масса частицы 2(МэВ)", "m2", 100.0);
            ParameterListTemplate.Add("Масса частицы 3(МэВ)", "m3", 100.0);
          
            ParameterListTemplate.Add("Минимальная энергия частицы 1(МэВ)", "E1_min", 50);
            ParameterListTemplate.Add("Максимальная энергия частицы 1(МэВ)", "E1_max", 70.0);
        }

        Particle s1 = new Particle();
        Particle s2 = new Particle();
        Particle s3 = new Particle();
        double e1max;

        public override void SetParameters(ParameterList pList)
        {
            m = pList["m"];

            s1.Mass = pList["m1"];
            s1.E = pList["E1_min"];
            
            s2.Mass = pList["m2"];
            s3.Mass = pList["m3"];

            e1max = pList["E1_max"];
        }


        public override ParameterList GetParameters()
        {
            ParameterList RetList = ParameterListTemplate;

            RetList["m"] = m;
            RetList["m1"] = s1.Mass;
            RetList["m2"] = s2.Mass;
            RetList["m3"] = s3.Mass;
            RetList["E1_max"] = e1max;

            return RetList;
        }

        public override PointPairList GetResults()
        {
            // todo: возвращаем результаты для статистики
            return new PointPairList();
        }
        #endregion

        #region Прорисовка

        double m;
        
        /// <summary>
        /// Метод рисования
        /// </summary>
        /// <param name="e"></param>
        public override void Draw(System.Windows.Forms.PaintEventArgs e)
        {
            //Ваше рисование здесь!
            DalizDrawer d = new DalizDrawer(m, this.Size);

            d.GetFigureBorder(s1, s2, s3, e1max);
            d.Draw(e.Graphics);
        }

        #endregion
    }
}
